//
//  UICollectionViewSectionModelProtocol.swift
//  iPhone
//
//  Created by Toj on 5/24/23.
//

import Foundation

/**
 * CellModel 协议
 * 给CollectionView 对应的Cell提供基础参数用的
 */
protocol UICollectionViewSectionModelProtocol: UICollectionViewSectionLayoutProtocol {
    
    /// 组内数据
    var items: [UICollectionViewCellModelProtocol] { get set }
    
    func append(item: UICollectionViewCellModelProtocol)
    
    func insert(item: UICollectionViewCellModelProtocol, at index: Int)
    
    func remove(at index: Int)
    
    func numberOfItems() -> Int
    
    func dataForItem(at row: Int) -> UICollectionViewCellModelProtocol
}

extension UICollectionViewSectionModelProtocol {
    
    /// 多少条数据
    func numberOfItems() -> Int { return items.count }
    
    // 对应组内某个成员
    func dataForItem(at row: Int) -> UICollectionViewCellModelProtocol {
        return items[row]
    }
}

protocol UICollectionViewSectionLayoutProtocol {
    
    /** 布局 */
    /// section 上下左右的间距
    var layoutEdgeinset: UIEdgeInsets { get }
    
    /// 头部大小
    var headerSize: CGSize { get }
    
    /// 尾部大小
    var footerSize: CGSize { get }
    
    /* 滚动方向相同的间距
     * 垂直滚动: 表示垂直间距.
     * 水平滚动: 表示水平间距.
     */
    var minimumLineSpacing: CGFloat { get }
    /* 滚动方向垂直的间距
     * 垂直滚动: 表示水平间距.
     * 水平滚动: 表示垂直间距.
     */
    var minimumInteritemSpacing: CGFloat { get }
}

extension UICollectionViewSectionLayoutProtocol {
    
    /** 布局 */
    /// section 上下左右的间距
    var layoutEdgeinset: UIEdgeInsets { return .zero }
    
    /// 头部大小
    var headerSize: CGSize { return .def_cipher }
    
    /// 尾部大小
    var footerSize: CGSize { return .def_cipher }
    
    /* 滚动方向相同的间距
     * 垂直滚动: 表示垂直间距.
     * 水平滚动: 表示水平间距.
     */
    var minimumLineSpacing: CGFloat { return .cg_cipher }
    /* 滚动方向垂直的间距
     * 垂直滚动: 表示水平间距.
     * 水平滚动: 表示垂直间距.
     */
    var minimumInteritemSpacing: CGFloat { return .cg_cipher }
}
